﻿// CPopEq.cpp: 实现文件
//

#include "pch.h"
#include "DntDemo.h"
#include "afxdialogex.h"
#include "CPopEq.h"

#include "FwbLog.h"
#include "CTabAudioKc3x.h"
#define TAG	"CPopEq"

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 标准C语言函数 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

CPopEq* mCPopEq = NULL;
static void changRegCallback() {
	if (mCPopEq != NULL) {
		mCPopEq->ShowRegister();
	}
}

void CPopEq::SetEqValue(int slider, int top, int bottom, int index) {		// 读取选项的状态值
	int position = ((CSliderCtrl*)GetDlgItem(slider))->GetPos();
	uint16_t value;
	int offset;
	switch (index) {
		case 0:		// EQ第一列
		case 1:		// EQ第二列
			offset = 5;
			break;
		case 2:		// EQ第三列
		case 3:		// EQ第四列
			offset = 8;
			break;
		default:	// EQ第五列
			offset = 11;
			break;
	}

	if ((index & 1) == 0) {										// 奇段的1-3-5
		if (mKc3x->EqSelect == 0x01) {							// 流行
			value = mKc3x->Eq0[offset];							// 这段低8位（B7:0）
			value |= (mKc3x->Eq0[offset + 2] & 0x0f) << 8;		// 这段高4位（B11:8）
		}
		if (mKc3x->EqSelect == 0x02) {							// 古典
			value = mKc3x->Eq1[offset];							// 这段低8位（B7:0）
			value |= (mKc3x->Eq1[offset + 2] & 0x0f) << 8;		// 这段高4位（B11:8）
		}
		if (mKc3x->EqSelect == 0x03) {							// 摇滚
			value = mKc3x->Eq2[offset];							// 这段低8位（B7:0）
			value |= (mKc3x->Eq2[offset + 2] & 0x0f) << 8;		// 这段高4位（B11:8）
		}
	}
	else {														// 偶段的2-4
		if (mKc3x->EqSelect == 0x01) {							// 流行
			value = mKc3x->Eq0[offset + 1];						// 这段低8位（B7:0）
			value |= (mKc3x->Eq0[offset + 2] >> 4) << 8;		// 这段高4位（B11:8）
		}
		if (mKc3x->EqSelect == 0x02) {							// 古典
			value = mKc3x->Eq1[offset + 1];						// 这段低8位（B7:0）
			value |= (mKc3x->Eq1[offset + 2] >> 4) << 8;		// 这段高4位（B11:8）
		}
		if (mKc3x->EqSelect == 0x03) {							// 摇滚
			value = mKc3x->Eq2[offset + 1];						// 这段低8位（B7:0）
			value |= (mKc3x->Eq2[offset + 2] >> 4) << 8;		// 这段高4位（B11:8）
		}
	}

	if (position >= 16) {	// 显示负数	
		value &= 0x07f;
		value |= ((position - 15) << 8);
		value |= 0x80;		// 0x80表示为负数的意思		
	}
	else {					// 显示正数
		value &= 0x07f;
		value |= (15 - position) << 8;
	}

	uint8_t level = value >> 8;										// 向右移8位，得到b11-b8的数值
	if ((index & 1) == 0) {											// 奇段的1-3-5
		if (mKc3x->EqSelect == 0x01) {								// 流行
			gEqValue0[offset] = (uint8_t)value;						// 奇段低8位（B7:0）
			gEqValue0[offset + 2] = mKc3x->Eq0[offset + 2] & 0xf0;	// 字节高4位（要保留偶段字节的高4位）（B11:8）
			gEqValue0[offset + 2] |= level;							// 字节低4位（变成奇段高4位）（B11:8）
		}
		if (mKc3x->EqSelect == 0x02) {								// 古典
			gEqValue1[offset] = (uint8_t)value;						// 奇段低8位（B7:0）
			gEqValue1[offset + 2] = mKc3x->Eq1[offset + 2] & 0xf0;	// 字节高4位（要保留偶段字节的高4位）（B11:8）
			gEqValue1[offset + 2] |= level;							// 字节低4位（变成奇段高4位）（B11:8）
		}
		if (mKc3x->EqSelect == 0x03) {								// 摇滚
			gEqValue2[offset] = (uint8_t)value;						// 奇段低8位（B7:0）
			gEqValue2[offset + 2] = mKc3x->Eq2[offset + 2] & 0xf0;	// 字节高4位（要保留偶段字节的高4位）（B11:8）
			gEqValue2[offset + 2] |= level;							// 字节低4位（变成奇段高4位）（B11:8）
		}
	}
	else {															// 偶数列的2-4
		if (mKc3x->EqSelect == 0x01) {								// 流行
			gEqValue0[offset + 1] = (uint8_t)value;					// 偶段低8位（B7:0）
			gEqValue0[offset + 2] = mKc3x->Eq0[offset + 2] & 0x0f;	// 字节低4位（要保留奇段字节的高4位）（B11:8）
			gEqValue0[offset + 2] |= level << 4;					// 字节高4位（向右移4位，变成偶段高4位）（B11:8）
		}
		if (mKc3x->EqSelect == 0x02) {								// 古典
			gEqValue1[offset + 1] = (uint8_t)value;					// 偶段低8位（B7:0）
			gEqValue1[offset + 2] = mKc3x->Eq1[offset + 2] & 0x0f;	// 字节低4位（要保留奇段字节的高4位）（B11:8）
			gEqValue1[offset + 2] |= level << 4;					// 字节高4位（向右移4位，变成偶段高4位）（B11:8）
		}
		if (mKc3x->EqSelect == 0x03) {								// 摇滚
			gEqValue2[offset + 1] = (uint8_t)value;					// 偶段低8位（B7:0）
			gEqValue2[offset + 2] = mKc3x->Eq2[offset + 2] & 0x0f;	// 字节低4位（要保留奇段字节的高4位）（B11:8）
			gEqValue2[offset + 2] |= level << 4;					// 字节高4位（向右移4位，变成偶段高4位）（B11:8）
		}
	}
	ShowEqSlider(value, slider, top, bottom);
	gEqSlowTime = 3;
}

int CPopEq::ShowEqSlider(uint16_t value, int slider, int top, int bottom) {		// 显示数值
	CString text;
	const int tabStep[] = { 5,50,100,500 };						// 每步的频率值
	int step = tabStep[(value >> 5) & 0x03];					// 每步的频率值
	int temp = step * (value & 0x1f);							// 频率值	(value & 0x1f)为步数
	int digit = (value >> 8) & 0x0f;							// 显示的数值
	int digitA = (value >> 7) & 0x01;							// 查看正负数

	if (top != -1) {
		text.Format(L"%dHz", temp);								// 频率数值显示
		((CStatic*)GetDlgItem(top))->SetWindowText(text);		// 频率数值显示
	}
		
	if (digitA == 0) {											// 显示正数
		text.Format(L"%d", digit);								// 显示正数	
		((CStatic*)GetDlgItem(bottom))->SetWindowText(text);
		return (15 - digit);									// 滑块显示位置
	}
	else {														// 显示负数
		text.Format(L"%d", digit * (-1));						// 显示负数
		((CStatic*)GetDlgItem(bottom))->SetWindowText(text);
		return (15 + digit);									// 滑块显示位置
	}
	return 0;
}

void CPopEq::ShowRegister() {
	static const int tabSliderIds[] = {
		IDC_SLIDER_EQ_1, IDC_SLIDER_EQ_2,
		IDC_SLIDER_EQ_3, IDC_SLIDER_EQ_4,
		IDC_SLIDER_EQ_5, -1,
	};
	static const int taTopIds[] = {
		IDC_EQ1_HZ, IDC_EQ2_HZ,
		IDC_EQ3_HZ, IDC_EQ4_HZ,
		IDC_EQ5_HZ, -1,
	};
	static const int tabBottomIds[] = {
		IDC_STATIC_EQ1_VALUE, IDC_STATIC_EQ2_VALUE,
		IDC_STATIC_EQ3_VALUE, IDC_STATIC_EQ4_VALUE,
		IDC_STATIC_EQ5_VALUE, -1,
	};

	CLOGI(TAG, "ShowRegister 标志的数值TT (%02x)", mKc3x->EqSelect);
	if (mKc3x->EqSelect == 0x00) {		// 平直
		((CStatic*)GetDlgItem(IDC_SLIDER_EQ_1))->EnableWindow(false);	// 不能滑动滑块
		((CStatic*)GetDlgItem(IDC_SLIDER_EQ_2))->EnableWindow(false);	// 不能滑动滑块
		((CStatic*)GetDlgItem(IDC_SLIDER_EQ_3))->EnableWindow(false);	// 不能滑动滑块
		((CStatic*)GetDlgItem(IDC_SLIDER_EQ_4))->EnableWindow(false);	// 不能滑动滑块
		((CStatic*)GetDlgItem(IDC_SLIDER_EQ_5))->EnableWindow(false);	// 不能滑动滑块
	}
	else {
		((CStatic*)GetDlgItem(IDC_SLIDER_EQ_1))->EnableWindow(true);	// 能滑动滑块
		((CStatic*)GetDlgItem(IDC_SLIDER_EQ_2))->EnableWindow(true);	// 能滑动滑块
		((CStatic*)GetDlgItem(IDC_SLIDER_EQ_3))->EnableWindow(true);	// 能滑动滑块
		((CStatic*)GetDlgItem(IDC_SLIDER_EQ_4))->EnableWindow(true);	// 能滑动滑块
		((CStatic*)GetDlgItem(IDC_SLIDER_EQ_5))->EnableWindow(true);	// 能滑动滑块
	}

	if (mKc3x->EqSelect == 0x00) {		// 平直
		((CButton*)GetDlgItem(IDC_EQ_FLAT))->SetCheck(true);		// 显示是否被选中
		((CButton*)GetDlgItem(IDC_EQ_POPULAR))->SetCheck(false);	// 显示是否被选中
		((CButton*)GetDlgItem(IDC_EQ_CLASS))->SetCheck(false);		// 显示是否被选中
		((CButton*)GetDlgItem(IDC_EQ_ROCK))->SetCheck(false);		// 显示是否被选中

		bool isMove = gEqSlowTime > 0 ? true : false;
		for (int index = 0; index < 5; index += 2) {
			if (tabSliderIds[index] != -1 && taTopIds[index] != -1 && tabBottomIds[index] != -1) {
				int position7 = 15;
				if (!isMove || gIsClick) {		// 拉动滑块松手后才SetPos数值，防止拉动滑块反复跳动 gIsClick是点击选择的标志
					((CSliderCtrl*)GetDlgItem(tabSliderIds[index]))->SetPos(position7);
				}
			}
			if (tabSliderIds[index + 1] != -1 && taTopIds[index] != -1 && tabBottomIds[index] != -1) {
				int position8 = 15;
				if (!isMove || gIsClick) {		// 拉动滑块松手后才SetPos数值，防止拉动滑块反复跳动 gIsClick是点击选择的标志
					((CSliderCtrl*)GetDlgItem(tabSliderIds[index + 1]))->SetPos(position8);
				}
			}
		}
		gIsClick = false;	  // 取消点击选择的标志
	}

	if (mKc3x->EqSelect == 0x01) {		// 流行
		((CButton*)GetDlgItem(IDC_EQ_FLAT))->SetCheck(false);		// 显示是否被选中
		((CButton*)GetDlgItem(IDC_EQ_POPULAR))->SetCheck(true);		// 显示是否被选中
		((CButton*)GetDlgItem(IDC_EQ_CLASS))->SetCheck(false);		// 显示是否被选中
		((CButton*)GetDlgItem(IDC_EQ_ROCK))->SetCheck(false);		// 显示是否被选中

		int offset = 5;
		bool isMove = gEqSlowTime > 0 ? true : false;
		for (int index = 0; index < 5; index += 2) {
			uint16_t odd = mKc3x->Eq0[offset] | (mKc3x->Eq0[offset + 2] & 0x0f) << 8;		// 奇段数值
			uint16_t even = mKc3x->Eq0[offset + 1] | (mKc3x->Eq0[offset + 2] >> 4) << 8;	// 偶段数值
			odd &= 0x0fff;
			even &= 0x0fff;
			if (tabSliderIds[index] != -1 && taTopIds[index] != -1 && tabBottomIds[index] != -1) {
				int position7 = ShowEqSlider(odd, tabSliderIds[index], taTopIds[index], tabBottomIds[index]);
				if (!isMove || gIsClick) {		// 拉动滑块松手后才SetPos数值，防止拉动滑块反复跳动 gIsClick是点击选择的标志
					((CSliderCtrl*)GetDlgItem(tabSliderIds[index]))->SetPos(position7);
				}
			}
			if (tabSliderIds[index + 1] != -1 && taTopIds[index] != -1 && tabBottomIds[index] != -1) {
				int position8 = ShowEqSlider(even, tabSliderIds[index + 1], taTopIds[index + 1], tabBottomIds[index + 1]);
				if (!isMove || gIsClick) {		// 拉动滑块松手后才SetPos数值，防止拉动滑块反复跳动 gIsClick是点击选择的标志
					((CSliderCtrl*)GetDlgItem(tabSliderIds[index + 1]))->SetPos(position8);
				}
			}
			offset += 3;
		}
		gIsClick = false;	  // 取消点击选择的标志
	}

	if (mKc3x->EqSelect == 0x02) {		// 古典
		((CButton*)GetDlgItem(IDC_EQ_FLAT))->SetCheck(false);		// 显示是否被选中
		((CButton*)GetDlgItem(IDC_EQ_POPULAR))->SetCheck(false);	// 显示是否被选中
		((CButton*)GetDlgItem(IDC_EQ_CLASS))->SetCheck(true);		// 显示是否被选中
		((CButton*)GetDlgItem(IDC_EQ_ROCK))->SetCheck(false);		// 显示是否被选中

		int offset = 5;
		bool isMove = gEqSlowTime > 0 ? true : false;
		for (int index = 0; index < 5; index += 2) {
			uint16_t odd = mKc3x->Eq1[offset] | (mKc3x->Eq1[offset + 2] & 0x0f) << 8;		// 奇段数值
			uint16_t even = mKc3x->Eq1[offset + 1] | (mKc3x->Eq1[offset + 2] >> 4) << 8;	// 偶段数值
			odd &= 0x0fff;
			even &= 0x0fff;
			if (tabSliderIds[index] != -1 && taTopIds[index] != -1 && tabBottomIds[index] != -1) {
				int position7 = ShowEqSlider(odd, tabSliderIds[index], taTopIds[index], tabBottomIds[index]);
				if (!isMove || gIsClick) {		// 拉动滑块松手后才SetPos数值，防止拉动滑块反复跳动 gIsClick是点击选择的标志
					((CSliderCtrl*)GetDlgItem(tabSliderIds[index]))->SetPos(position7);
				}
			}
			if (tabSliderIds[index + 1] != -1 && taTopIds[index] != -1 && tabBottomIds[index] != -1) {
				int position8 = ShowEqSlider(even, tabSliderIds[index + 1], taTopIds[index + 1], tabBottomIds[index + 1]);
				if (!isMove || gIsClick) {		// 拉动滑块松手后才SetPos数值，防止拉动滑块反复跳动 gIsClick是点击选择的标志
					((CSliderCtrl*)GetDlgItem(tabSliderIds[index + 1]))->SetPos(position8);
				}
			}
			offset += 3;
		}
		gIsClick = false;	  // 取消点击选择的标志
	}

	if (mKc3x->EqSelect == 0x03) {		// 摇滚
		((CButton*)GetDlgItem(IDC_EQ_FLAT))->SetCheck(false);		// 显示是否被选中
		((CButton*)GetDlgItem(IDC_EQ_POPULAR))->SetCheck(false);	// 显示是否被选中
		((CButton*)GetDlgItem(IDC_EQ_CLASS))->SetCheck(false);		// 显示是否被选中
		((CButton*)GetDlgItem(IDC_EQ_ROCK))->SetCheck(true);		// 显示是否被选中

		int offset = 5;
		bool isMove = gEqSlowTime > 0 ? true : false;
		for (int index = 0; index < 5; index += 2) {
			uint16_t odd = mKc3x->Eq2[offset] | (mKc3x->Eq2[offset + 2] & 0x0f) << 8;		// 奇段数值
			uint16_t even = mKc3x->Eq2[offset + 1] | (mKc3x->Eq2[offset + 2] >> 4) << 8;	// 偶段数值
			odd &= 0x0fff;
			even &= 0x0fff;
			if (tabSliderIds[index] != -1 && taTopIds[index] != -1 && tabBottomIds[index] != -1) {
				int position7 = ShowEqSlider(odd, tabSliderIds[index], taTopIds[index], tabBottomIds[index]);
				if (!isMove || gIsClick) {		// 拉动滑块松手后才SetPos数值，防止拉动滑块反复跳动 gIsClick是点击选择的标志
					((CSliderCtrl*)GetDlgItem(tabSliderIds[index]))->SetPos(position7);
				}
			}
			if (tabSliderIds[index + 1] != -1 && taTopIds[index] != -1 && tabBottomIds[index] != -1) {
				int position8 = ShowEqSlider(even, tabSliderIds[index + 1], taTopIds[index + 1], tabBottomIds[index + 1]);
				if (!isMove || gIsClick) {		// 拉动滑块松手后才SetPos数值，防止拉动滑块反复跳动 gIsClick是点击选择的标志
					((CSliderCtrl*)GetDlgItem(tabSliderIds[index + 1]))->SetPos(position8);
				}
			}
			offset += 3;
		}
		gIsClick = false;	  // 取消点击选择的标志
	}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// C++语言对话框函数 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// CPopEq 对话框
IMPLEMENT_DYNAMIC(CPopEq, CDialogEx)

CPopEq::CPopEq(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_POP_EQ, pParent){
}

CPopEq::~CPopEq(){
}

void CPopEq::DoDataExchange(CDataExchange* pDX){
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CPopEq, CDialogEx)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_EQ_FLAT, &CPopEq::OnBnClickedEqFlat)
	ON_BN_CLICKED(IDC_EQ_POPULAR, &CPopEq::OnBnClickedEqPopular)
	ON_BN_CLICKED(IDC_EQ_CLASS, &CPopEq::OnBnClickedEqClass)
	ON_BN_CLICKED(IDC_EQ_ROCK, &CPopEq::OnBnClickedEqRock)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_EQ_1, &CPopEq::OnNMCustomdrawSliderEq1)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_EQ_2, &CPopEq::OnNMCustomdrawSliderEq2)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_EQ_3, &CPopEq::OnNMCustomdrawSliderEq3)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_EQ_4, &CPopEq::OnNMCustomdrawSliderEq4)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_EQ_5, &CPopEq::OnNMCustomdrawSliderEq5)
END_MESSAGE_MAP()

// CPopEq 消息处理程序

BOOL CPopEq::OnInitDialog() {
	CDialogEx::OnInitDialog();
	// TODO:  在此添加额外的初始化

	((CSliderCtrl*)GetDlgItem(IDC_SLIDER_EQ_1))->SetTicFreq(15);	// 设置每x个刻度显示一个间隔刻度线(需要在属性“外观”打开“打勾标记”和“自动打勾”)
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER_EQ_2))->SetTicFreq(15);	// 设置每x个刻度显示一个间隔刻度线(需要在属性“外观”打开“打勾标记”和“自动打勾”)
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER_EQ_3))->SetTicFreq(15);	// 设置每x个刻度显示一个间隔刻度线(需要在属性“外观”打开“打勾标记”和“自动打勾”)
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER_EQ_4))->SetTicFreq(15);	// 设置每x个刻度显示一个间隔刻度线(需要在属性“外观”打开“打勾标记”和“自动打勾”)
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER_EQ_5))->SetTicFreq(15);	// 设置每x个刻度显示一个间隔刻度线(需要在属性“外观”打开“打勾标记”和“自动打勾”)

	((CSliderCtrl*)GetDlgItem(IDC_SLIDER_EQ_1))->SetRange(0, 30);	// 设置最小值和最大值
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER_EQ_2))->SetRange(0, 30);	// 设置最小值和最大值
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER_EQ_3))->SetRange(0, 30);	// 设置最小值和最大值
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER_EQ_4))->SetRange(0, 30);	// 设置最小值和最大值
	((CSliderCtrl*)GetDlgItem(IDC_SLIDER_EQ_5))->SetRange(0, 30);	// 设置最小值和最大值
	
	mCPopEq = this;
	isPopKc3xRegi = false;

	memset(gEqValue0, 0, sizeof(gEqValue0));
	memset(gEqValue1, 0, sizeof(gEqValue1));
	memset(gEqValue2, 0, sizeof(gEqValue2));
	gEqSlowTime = 0;
	ShowRegister();
	memcpy(gEqValue0, mKc3x->Eq0, sizeof(gEqValue0));		// 复制mKc3x->Eq0的数据到gEqValue0中
	memcpy(gEqValue1, mKc3x->Eq1, sizeof(gEqValue1));		// 复制mKc3x->Eq1的数据到gEqValue1中
	memcpy(gEqValue2, mKc3x->Eq2, sizeof(gEqValue2));		// 复制mKc3x->Eq2的数据到gEqValue2中

	TestChangRegCallback(changRegCallback);
	SetTimer(1, 300, NULL);
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}


void CPopEq::OnTimer(UINT_PTR nIDEvent) {
	if (memcmp(mKc3x->Eq0, gEqValue0, sizeof(gEqValue0))) {			// 如果判断数据不同
		memcpy(mKc3x->Eq0, gEqValue0, sizeof(gEqValue0));			// 把数据gEqValue0复制到mKc3x->Eq0中
		isPopKc3xRegi = true;
	}

	if (memcmp(mKc3x->Eq1, gEqValue1, sizeof(gEqValue1))) {			// 如果判断数据不同
		memcpy(mKc3x->Eq1, gEqValue1, sizeof(gEqValue1));			// 把数据gEqValue1复制到mKc3x->Eq1中
		isPopKc3xRegi = true;
	}

	if (memcmp(mKc3x->Eq2, gEqValue2, sizeof(gEqValue2))) {			// 如果判断数据不同
		memcpy(mKc3x->Eq2, gEqValue2, sizeof(gEqValue2));			// 把数据gEqValue2复制到mKc3x->Eq2中
		isPopKc3xRegi = true;
	}

	if (isPopKc3xRegi) {
		isPopKc3xRegi = false;
		uint8_t EqSave0[16];
		uint8_t EqSave1[16];
		uint8_t EqSave2[16];
		memcpy(EqSave0, gEqValue0, sizeof(gEqValue0));			// 把gEqValue0复制到EqSave0中，防止拉动滑块过程中数值反复跳动
		memcpy(EqSave1, gEqValue1, sizeof(gEqValue1));			// 把gEqValue1复制到EqSave1中，防止拉动滑块过程中数值反复跳动
		memcpy(EqSave2, gEqValue2, sizeof(gEqValue2));			// 把gEqValue2复制到EqSave2中，防止拉动滑块过程中数值反复跳动
		ShowRegister();
		memcpy(gEqValue0, EqSave0, sizeof(gEqValue0));			// 把EqSave0复制到gEqValue0中，防止拉动滑块过程中数值反复跳动
		memcpy(gEqValue1, EqSave1, sizeof(gEqValue1));			// 把EqSave1复制到gEqValue1中，防止拉动滑块过程中数值反复跳动
		memcpy(gEqValue2, EqSave2, sizeof(gEqValue2));			// 把EqSave2复制到gEqValue2中，防止拉动滑块过程中数值反复跳动
		DntRegWrite();											// 写寄存器
	}
	
	if (gEqSlowTime) {
		--gEqSlowTime;
	}
	CDialogEx::OnTimer(nIDEvent);
}

void CPopEq::OnNMCustomdrawSliderEq1(NMHDR* pNMHDR, LRESULT* pResult){
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	SetEqValue(IDC_SLIDER_EQ_1, IDC_EQ1_HZ, IDC_STATIC_EQ1_VALUE, 0);				// 显示数值
	*pResult = 0;
}

void CPopEq::OnNMCustomdrawSliderEq2(NMHDR* pNMHDR, LRESULT* pResult){
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	SetEqValue(IDC_SLIDER_EQ_2, IDC_EQ2_HZ, IDC_STATIC_EQ2_VALUE, 1);				// 显示数值
	*pResult = 0;
}

void CPopEq::OnNMCustomdrawSliderEq3(NMHDR* pNMHDR, LRESULT* pResult){
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	SetEqValue(IDC_SLIDER_EQ_3, IDC_EQ3_HZ, IDC_STATIC_EQ3_VALUE, 2);				// 显示数值
	*pResult = 0;
}

void CPopEq::OnNMCustomdrawSliderEq4(NMHDR* pNMHDR, LRESULT* pResult){
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	SetEqValue(IDC_SLIDER_EQ_4, IDC_EQ4_HZ, IDC_STATIC_EQ4_VALUE, 3);				// 显示数值
	*pResult = 0;
}

void CPopEq::OnNMCustomdrawSliderEq5(NMHDR* pNMHDR, LRESULT* pResult){
	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	SetEqValue(IDC_SLIDER_EQ_5, IDC_EQ5_HZ, IDC_STATIC_EQ5_VALUE, 4);				// 显示数值
	*pResult = 0;
}

void CPopEq::OnBnClickedEqFlat() {		// 平直
	((CButton*)GetDlgItem(IDC_EQ_FLAT))->SetCheck(TRUE);
	mKc3x->EqSelect = 0x00;
	DntRegWrite();						// 写寄存器
	gIsClick =  true;					// 点击选择的标志
	ShowRegister();
}

void CPopEq::OnBnClickedEqPopular() {	// 流行
	((CButton*)GetDlgItem(IDC_EQ_POPULAR))->SetCheck(TRUE);
	mKc3x->EqSelect = 0x01;
	DntRegWrite();						// 写寄存器
	gIsClick = true;					// 点击选择的标志
	ShowRegister();
}

void CPopEq::OnBnClickedEqClass() {		// 古典
	((CButton*)GetDlgItem(IDC_EQ_CLASS))->SetCheck(TRUE);
	mKc3x->EqSelect = 0x02;
	DntRegWrite();						// 写寄存器
	gIsClick = true;					// 点击选择的标志
	ShowRegister();
}

void CPopEq::OnBnClickedEqRock() {		// 摇滚
	((CButton*)GetDlgItem(IDC_EQ_ROCK))->SetCheck(TRUE);
	mKc3x->EqSelect = 0x03;
	DntRegWrite();						// 写寄存器
	gIsClick = true;					// 点击选择的标志
	ShowRegister();
}